/* @flow */

import { toArray } from '../util/index'
// Vue.use API用来注册插件
export function initUse (Vue: GlobalAPI) {
  Vue.use = function (plugin: Function | Object) {
    const installedPlugins = (this._installedPlugins || (this._installedPlugins = []))
    if (installedPlugins.indexOf(plugin) > -1) {
      return this
    }

    // additional parameters
    const args = toArray(arguments, 1)
    args.unshift(this)
    // 判断plugin有没有定义install方法
    if (typeof plugin.install === 'function') {
      // 注册组件要加install 方法。
      // Vue插件注册机制，每个插件都要实现一个静态install方法
      // 当执行Vue.use注册插件时，就会执行install方法，并且在这个install方法的第一个参数就是Vue对象
      plugin.install.apply(plugin, args)
    } else if (typeof plugin === 'function') {
      plugin.apply(null, args)
    }
    installedPlugins.push(plugin)
    return this
  }
}
